using System;
using System.Web;
using System.Web.SessionState;

namespace ActivUFRJ.Classes.Usuario
{
    public class Usuario
    {

        public Usuario()
        {

        }

        public Usuario(int idUsuario)
        {
            this.ID = idUsuario;

            DBUsuario dbUsuario = new DBUsuario();
            dbUsuario.CarregarUsuario(this);
            dbUsuario.Dispose();
        }

        /// <summary>
        /// carrega a partir da query string
        /// </summary>
        /// <param name="idUsuario"></param>
        public Usuario(string strUsuario)
        {
            try
            {
                int idUsuario = System.Convert.ToInt32(strUsuario);

                DBUsuario dbUsuario = new DBUsuario();
                this.ID = idUsuario;

                dbUsuario.CarregarUsuario(this);
                dbUsuario.Dispose();
            }
            catch { }
        }


        private int id;
        private string nome;
        private string sobrenome;
        private string login;
        private string email;
        private DateTime dataNascimento;
        private string senha;
        private StatusConta statusConta;
        private string perguntaSecreta;
        private string respostaSecreta;
        private DateTime dataRegistro;
        private Geral.FormacaoAcademica formacaoAcademica;
        private Geral.Instituicao instituicao;
        private AreaTrabalho areaTrabalho;
        private string linkImagem;

        public int ID
        {
            get { return id; }
            set { id = value; }
        }

        public string Nome
        {
            get { return nome; }
            set { nome = value; }
        }

        public string NomeCompleto
        {
            get { return nome + " " + sobrenome; }
        }

        public string Sobrenome
        {
            get { return sobrenome; }
            set { sobrenome = value; }
        }

        public string Login
        {
            get { return login; }
            set { login = value; }
        }

        public string Email
        {
            get { return email; }
            set { email = value; }
        }

        public DateTime DataNascimento
        {
            get { return dataNascimento; }
            set { dataNascimento = value; }
        }

        public string Senha
        {
            get { return senha; }
            set { senha = value; }
        }

        public StatusConta StatusConta
        {
            get { return statusConta; }
            set { statusConta = value; }
        }

        public string PerguntaSecreta
        {
            get { return perguntaSecreta; }
            set { perguntaSecreta = value; }
        }

        public string RespostaSecreta
        {
            get { return respostaSecreta; }
            set { respostaSecreta = value; }
        }

        public DateTime DataRegistro
        {
            get { return dataRegistro; }
            set { dataRegistro = value; }
        }

        public Geral.FormacaoAcademica FormacaoAcademica
        {
            get { return formacaoAcademica; }
            set { formacaoAcademica = value; }
        }

        public Geral.Instituicao Instituicao
        {
            get { return instituicao; }
            set { instituicao = value; }
        }

        public AreaTrabalho AreaTrabalho
        {
            get { return areaTrabalho; }
            set { areaTrabalho = value; }
        }

        public bool ValidarLogin()
        {
            DBUsuario dbUsuario = new DBUsuario();
            return dbUsuario.ValidarLogin(this);
        }

        public string LinkImagem
        {
            get { return linkImagem; }
            set { linkImagem = value; }
        }

        public bool ValidarCadastro()
        {
            return false;
        }

        public void IniciarSessao()
        {
            switch (this.StatusConta)
            {
                case StatusConta.Ativada:
                    HttpContext.Current.Session.Add("Usuario", this);
                    ActivUFRJ.Classes.Log.LogAcessoUsuario.CadastrarNovoAcesso(this);
                    HttpContext.Current.Response.Redirect(ActivUFRJ.Sistema.Paginas.DefaultUserPage);
                    break;
                case StatusConta.AguardandoAprovacao:
                    HttpContext.Current.Session.Abandon();
                    System.Web.HttpContext.Current.Session.Add("Usuario", this);
                    HttpContext.Current.Response.Redirect(ActivUFRJ.Sistema.Paginas.TerminoCadastro);
                    break;
                case StatusConta.Desativada:
                    HttpContext.Current.Session.Abandon();
                    HttpContext.Current.Response.Redirect(ActivUFRJ.Sistema.Paginas.ContaDesativada);
                    break;
            }
        }

        public bool SalvarDados()
        {
            DBUsuario dbUser = new DBUsuario();
            return dbUser.SalvarDados(this);
        }

        public void RegistrarVisita(Usuario usuarioVisitante)
        {
            DBUsuario dbUsuario = new DBUsuario();
            dbUsuario.RegistrarVisita(this, usuarioVisitante);
        }

    }
}
